import axios from 'axios'
import QS from 'qs';
import { ElMessage } from 'element-plus';
import store from '../store/store'
import cookies from "@/utils/util.cookies";
// 根据环境切换请求前缀
// if (process.env.NODE_ENV == 'development') {
// 	// axios.defaults.baseURL = 'http://rest.apizza.net/mock/467f2bc8f21bd7e818e47697aff3eed3/'
// 	axios.defaults.baseURL = process.env.VUE_APP_BASE_API //从环境变量中自动读取
// } else if (process.env.NODE_ENV == 'production') {
// 	// axios.defaults.baseURL = 'http://www.lianlma.com/api'
// 	axios.defaults.baseURL = process.env.VUE_APP_BASE_API //从环境变量中自动读取
// }

// 直接设置请求前缀
// axios.defaults.baseURL = 'http://rest.apizza.net/mock/467f2bc8f21bd7e818e47697aff3eed3/'
axios.defaults.baseURL = process.env.VUE_APP_BASE_API //从环境变量中自动读取

// 请求超时时间
axios.defaults.timeout = 10000; //本项目中，请救登录时，服务器与微信沟通有时会发神经病超时，所以这里改成10秒试下

// post请求头
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';

// 请求拦截器
axios.interceptors.request.use(

    config => {
		store.state.loading = true
	    //todo 这里可能要发送2种cookie
	    
	    // config.headers.unionid = cookies.get('unionid');   // 在head设定token
	    //config.headers.unionid = store.state.user.unionid   // 在head设定token
	    // config.params.unionid = store.state.user.unionid   //强行把token塞入参数
	    // console.log('请求拦截config',config)
        return config;
    },
	// //处理请求信息 不知是不是这个位置？
	// request => {
    // 	request.data.unionid = store.state.user.unionid
	// 	console.log('请求拦截request',request.data)
	// 	return request
	// },

    error => {
        return Promise.error(error);
    })


// --------------------------- 测试

// 响应拦截器
axios.interceptors.response.use(
    response => {
		setTimeout(() => { store.state.loading = false }, 200) //load效果久一点
		// 其实应该不用再加这个200的状态判断？
		if (response.status === 200) {
			let res = response.data
			// 自定义拦截
			if (res.code == 0) {
				return Promise.resolve(response)
			} else if (res.code == 401) {
				ElMessage.error('接口返回错误：' + res.msg + '，即将自动跳转')
				setTimeout(() => {
					// store.dispatch('user/userExitLogin')
				}, 2000);
			} else if (res.code == undefined) {
				// 前台每个页面会 获取用户登录信息，如果没有登录，code返回1， 不要执行下面的
				// ElMessage({ message: '接口不规范！', type: 'warning' })
				return Promise.resolve(response)
			} else {
				// 其它个位数的状态码在各业务逻辑中自行判断处理
				// ElMessage.error('接口返回错误：' + res.msg + '，即将自动跳转')
				//由于旧接口对最外层code处理的关系，这里还是要返回
				return Promise.resolve(response)
			}
        
        } else {
            return Promise.reject(response);
        }
    },
    // 服务器状态码不是200的情况
    error => {
	    ElMessage({message:"接口请求无效，请检查网络",type:"error",duration:5000})
        if (error.response.code) {
            return Promise.reject(error.response);
		}
    }
);
/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function get(url, params){
    return new Promise((resolve, reject) =>{
        axios.get(url, {
            params: params
        })
        .then(res => {
			resolve(res.data)
        })
        .catch(err => {
			reject(err.data)
        })
    });
}
/**
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function post(url, params) {
    return new Promise((resolve, reject) => {
        axios.post(url, QS.stringify(params))
        .then(res => {
            resolve(res.data);
        })
        .catch(err => {
            reject(err.data)
        })
    });
}
